Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сахабутдинов Ильфир #240

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

ILFirV-V
Copy link

@a_zhelonkin

return rectangle;
}

public IReadOnlyCollection<Rectangle> GetRectangles()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Круто что используешь IReadonly*
nit: оборачивать в AsReadonly нет большой необходимости, достаточно того что произойдет сужение типа и уже только поэтому снаружи никто не сможет мутировать коллекцию. Конечно, технически все еще будет возможность привести тип обратно, но в таком случае это будет уже проблемой того самого разработчика. Ну и как следствие. можно перейти от функции к свойству

Func<Rectangle, bool> checkNegativeMove,
Func<Rectangle, int, Rectangle> doMove)
{
if (checkPositiveMove(rectangle) && checkNegativeMove(rectangle)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: если не ошибаюсь, можно свернуть в checkPositiveMove(rectangle) == checkNegativeMove(rectangle)

private Point GetRectangleLocation(Size rectangleSize)
{
var shiftFromCenter = -1 * rectangleSize / 2;
if (!rectangles.Any())

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: холиварный момент, но часто рекомендую явно проверять размер, когда это возможно и не создает накладных расходов, иначе внутри будет создан лишний итератор, который попробует взять первый элемент. Последние версии dotnet'а научились это решать, но тем не менее


var x = center.X + layer * distanceLayersDifference * Math.Cos(angle);
var y = center.Y + layer * distanceLayersDifference * Math.Sin(angle);
var wholeX = Convert.ToInt32(x);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: можно и просто кастонуть wholeX = (int) x. Внутри Convert происходит примерно то же самое

if (angle > fullCircleTurn)
{
UpdateLayer();
angle = 0;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Думаю, надежнее делать angle %= fullCircleTurn или хотя бы angle -= fullCircleTurn на случай, если в fullCircleTurn будет нецелое количество betweenAngleDifference


namespace TagsCloudVisualization;

public class CircularCloudLayouter : ICircularCloudLayouter

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ходят легенды, что если помечать классы sealed (особенно при большом количестве типов), можно получить неощутимые рост производительности. А если серьезно, то если класс не спроектирован под расширение, то лучше сразу запечатывать. Если понадобится, всегда можно будет открыть

public CircularCloudLayouter(Point center)
{
this.center = center;
rectangles = new List<Rectangle>();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Возможно, это какая-то привычка, но всё это и ниже можно либо писать сразу напротив поля, либо и так значения по умолчанию

isDisposed = false;
}

public void AddVisualizationRectangles(IEnumerable<Rectangle> rectangles)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Выглядит норм, но кажется что перестарался с декомпозицией. Я бы сложил всё что касается graphics в одну функцию

graphics.FillEllipse(Brushes.Red, centerRectangle);
}

~TagsCloudVisualizer()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем?


namespace TagsCloudVisualization.Tests;

internal static class CircularCloudLayouterTestCases

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Есть вариант сделать этот класс и класс с тестами partial. Файл с кейсами назвать, например, CircularCloudLayouterTests.Cases.cs, чтобы было понятно, что 2 файла содержат общий тип. Тогда кейсы можно будет сделать приватными, а во втором классе можно будет избавиться от проксирования

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants